// sharedWorker.js
let timer = 0; // 秒表计数器
let isRunning = false; // 计时器运行状态
let intervalId; // 用于存储计时器的 Interval ID
const connections = []; // 存储所有连接到共享工作者的端口

// 每秒更新当前时间并广播给所有页面
function updateClock() {
    const now = new Date();
    const year = now.getFullYear();
    const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始，因此+1
    const day = String(now.getDate()).padStart(2, '0');
    const hours = String(now.getHours()).padStart(2, '0');
    const minutes = String(now.getMinutes()).padStart(2, '0');
    const seconds = String(now.getSeconds()).padStart(2, '0');
    // 格式化为 YYYY年MM月DD日 HH:mm:ss
    const timeString = `${year}年${month}月${day}日 ${hours}:${minutes}:${seconds}`;
    connections.forEach(port => port.postMessage({ type: 'clock', time: timeString }));
}

// 启动计时器
function startTimer() {
    if (isRunning) return; // 防止重复启动计时器
    isRunning = true;
    intervalId = setInterval(() => {
        timer++;
        sendTimeUpdate();

        // 每 30 秒发送网络请求
        if (timer % 30 === 0) {
            sendData();
            fetchData();
        }
    }, 1000);
}

// 暂停计时器
function pauseTimer() {
    if (!isRunning) return;
    clearInterval(intervalId);
    isRunning = false;
}

// 重置计时器
function resetTimer() {
    pauseTimer();
    timer = 0;
    sendTimeUpdate();
}

// 格式化秒表时间
function formatTime(seconds) {
    if (seconds < 60) return `${seconds}秒`;
    if (seconds < 3600) return `${Math.floor(seconds / 60)}分${seconds % 60}秒`;
    return `${Math.floor(seconds / 3600)}小时${Math.floor((seconds % 3600) / 60)}分钟${seconds % 60}秒`;
}

// 向所有页面发送秒表时间更新
function sendTimeUpdate() {
    const formattedTime = formatTime(timer);
    connections.forEach(port => port.postMessage({ type: 'timer', time: formattedTime }));
}

// 模拟发送数据请求
function sendData() {
    console.log("发送数据请求...");
}

// 模拟获取数据请求
function fetchData() {
    console.log("获取数据请求...");
}

// 监听连接请求
onconnect = function(e) {
    const port = e.ports[0];
    connections.push(port);

    // 发送当前的秒表时间和时钟时间给新连接的页面
    sendTimeUpdate();
    updateClock();

    // 监听页面的控制操作
    port.onmessage = function(event) {
        const action = event.data;
        if (action === 'start') startTimer();
        else if (action === 'pause') pauseTimer();
        else if (action === 'reset') resetTimer();
        else if (action === 'clock') updateClock();
    };

    // 每秒更新一次时钟
    setInterval(updateClock, 1000);

    // 处理断开连接
    port.onclose = () => {
        const index = connections.indexOf(port);
        if (index > -1) connections.splice(index, 1);
    };
};
